# Servlet
# 构件
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
# 部署描述符
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true"
version="3.0">
</web-app>
# Servlet
# 配置
使用注解进行配置:
@WebServlet(urlPatterns = "/WebServlet")
在部署描述符中进行配置:
<servlet>
<servlet-name>WebServlet</servlet-name>
<servlet-class>cn.inxiny.controller.ApplicationController</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WebServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
# ServletConfig
<servlet>
<servlet-name>WebServlet</servlet-name>
<servlet-class>cn.inxiny.controller.ApplicationController</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
获取初始化参数:
this.getServletConfig().getInitParameter("name");
# ServletContext
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
获取初始化参数:
this.getServletContext().getInitParameter("name");
获取资源文件绝对路径:
this.getServletContext().getRealPath("/WEB-INF/classes/jdbc.properties");
获取资源文件 MIME type:
this.getServletContext().getMimeType("test.jpg");
获取资源文件流:
this.getServletContext().getResourceAsStream("/WEB-INF/classes/test.jpg");
# Filter
# 配置
使用注解进行配置:
@WebFilter(filterName = "CodeFilter", urlPatterns = "/*")
在部署描述符中进行配置:
<filter>
<filter-name>ApplicationFilter</filter-name>
<filter-class>cn.inxiny.controller.ApplicationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ApplicationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
# FilterConfig
<filter>
<filter-name>ApplicationFilter</filter-name>
<filter-class>cn.inxiny.controller.ApplicationFilter</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</filter>
获取初始化参数:
filterConfig.getInitParameter("name");
# CharacterEncodingFilter
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
# HttpServletRequest
# Params
获取 HTTP Get 参数:
req.getParameter("name");
# HttpServletResponse
# 编码
默认编码是 ISO 8859-1,目前在浏览器中都是以 Windows-1252 来实现的。
设置默认编码:
resp.setCharacterEncoding(StandardCharsets.UTF_8);
设置 Header,同时会设置默认编码:
resp.setHeader("Content-Type", "text/html; charset=utf-8");
下载文件时,因 HTTP header 不支持 UTF-8,仅支持 ISO-8859-1,需转换编码:
// Chrome
String fileName = new String("文档.word".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
// Chrome、IE11
String fileName = URLEncoder.encode("文档.word", StandardCharsets.UTF_8.name()).replace("+", "%20");
resp.setHeader("Content-Disposition", String.format("attachment; filename=%s", fileName));
# 参考文献
- [Java Servlet 3.1 规范笔记](https://emacsist.github.io/emacsist/servlet/Java Servlet 3.1 规范笔记.html)